﻿using System.Collections.Generic;
using System.Linq;
using System.Web;
using Negocio = PSE.Tools.CadastroMensagens.Negocio;
using PSE.Tools.Util.Entidades;
using System;

namespace PSE.Tools.CadastroMensagens.Apresentacao
{
    /// <summary>
    /// MensagensResources
    /// </summary>
    public class MensagensResources
    {
        #region [ Variáveis ]

        private IApresentacao _apresentacao;
        private Negocio.Resources _negocioResources;
        private Negocio.Mensagens _negocioMensagem;

        #endregion

        #region [ Construtores ]

        public MensagensResources(IApresentacao apresentacao, Negocio.Resources negocioResources, Negocio.Mensagens negocioMensagem)
        {
            _apresentacao = apresentacao;
            _negocioResources = negocioResources;
            _negocioMensagem = negocioMensagem;
        }

        #endregion

        #region [ Métodos ]

        /// <summary>
        /// Inserir
        /// </summary>
        /// <param name="resource"></param>
        /// <returns></returns>
        public bool Inserir(Entidades.Resource resource)
        {
            bool retorno = false;
            try
            {
                //resource.CriadoPor = "p-angsilva";
                int idResource = _negocioResources.Inserir(resource);

                foreach (Entidades.Mensagem mensagem in resource.ListaMensagens)
                {
                    _negocioMensagem.Inserir(mensagem, idResource);
                }

                _apresentacao.EnviarMensagem("Resource e Mensagens Inseridos com Sucesso");
                retorno = true;
            }
            catch (ValidacaoEntidadeException ex)
            {
                _apresentacao.EnviarMensagemValidacao(ex.Validacoes);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
            }
            return retorno;
        }

        /// <summary>
        /// Atualizar
        /// </summary>
        /// <param name="resource"></param>
        /// <returns></returns>
        public bool Atualizar(Entidades.Resource resource)
        {
            bool retorno = false;
            try
            {
                _negocioResources.Atualizar(resource);

                foreach (Entidades.Mensagem mensagem in resource.ListaMensagens)
                {
                    _negocioMensagem.Atualizar(mensagem, resource.Id);
                }

                _apresentacao.EnviarMensagem("Resource e Mensagens Atualizados com Sucesso");
                retorno = true;
            }
            catch (ValidacaoEntidadeException ex)
            {
                _apresentacao.EnviarMensagemValidacao(ex.Validacoes);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
            }
            return retorno;
        }

        /// <summary>
        /// Excluir
        /// </summary>
        /// <param name="resource"></param>
        /// <returns></returns>
        public bool Excluir(Entidades.Resource resource)
        {
            bool retorno = false;
            try
            {
                _negocioMensagem.Excluir(resource.Id);
                _negocioResources.Excluir(resource);

                _apresentacao.EnviarMensagem("Resources e Mensagens Excluídos com Sucesso");
                retorno = true;
            }
            catch (ValidacaoEntidadeException ex)
            {
                _apresentacao.EnviarMensagemValidacao(ex.Validacoes);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
            }
            return retorno;
        }

        #endregion
    }
}
